home *** CD-ROM | disk | FTP | other *** search
/ Tech Arsenal 1 / Tech Arsenal (Arsenal Computer).ISO / tek-01 / lcppb.zip / LCPPLIB.ZIP / POLY.CPP < prev    next >
C/C++ Source or Header  |  1991-07-08  |  2KB  |  75 lines

  1. // poly.cpp -- Demonstrate polymorphism
  2.  
  3. //#include <stream.hpp>
  4. #include <iostream.h>
  5.  
  6. /* -- Declare an abstract shape class */
  7.  
  8. class shape {
  9.   public:
  10.     virtual void draw(void) = 0;
  11. };
  12.  
  13. /* -- Declare three derived classes that inherit the properties of
  14. the shape class. */
  15.  
  16. class circle: public shape {
  17.   public:
  18.     virtual void draw(void);
  19. };
  20.  
  21. class square: public shape {
  22.   public:
  23.     virtual void draw(void);
  24. };
  25.  
  26. class line: public shape {
  27.   public:
  28.     virtual void draw(void);
  29. };
  30.  
  31. /* -- The main program */
  32.  
  33. main()
  34. {
  35.   shape *p[3];            // Three shape pointers
  36.  
  37.   p[0] = new circle;      // Allocate space for a circle
  38.   p[1] = new square;      // Allocate space for a square
  39.   p[2] = new line;        // Allocate space for a line
  40.  
  41. /* -- Call the virtual draw method in the instance addressed by the
  42. pointers in the p[] array. Which virtual function actually executes
  43. is determined at runtime by the instance itself. */
  44.  
  45.   for (int i = 0; i <=2; i++)
  46.     p[i]->draw();
  47. }
  48.  
  49. /* -- The implementations of the three classes that derive from the
  50. base class shape. Although declared to be virtual, the functions are
  51. no different in form than nonvirtual member functions. */
  52.  
  53. void circle::draw(void)
  54. {
  55.   cout << "\nInside circle::draw()";
  56. }
  57.  
  58. void square::draw(void)
  59. {
  60.   cout << "\nInside square::draw()";
  61. }
  62.  
  63. void line::draw(void)
  64. {
  65.   cout << "\nInside line::draw()";
  66. }
  67.  
  68.  
  69. // Copyright (c) 1990 by Tom Swan. All rights reserved
  70. // Revision 1.00    Date: 10/20/1990   Time: 03:15 pm
  71.  
  72. // Revision 1.01    Date: 07/08/1991   Time: 05:41 pm
  73. // Converted for Borland C++ 2.0
  74.  
  75.